#include "Indice.h"

#include <stddef.h>
#include <stdlib.h>
#include "vector_dinamico.h"


/* *****************************************************************
 *                DEFINICION DE LOS TIPOS DE DATOS
 * *****************************************************************/

struct _Indice {
	vector_dinamico_t* rutas_lexico;
	vector_dinamico_t* rutas_datos; 
};

/* *****************************************************************
 *                    PRIMITIVAS DEL Indice
 * *****************************************************************/

/* Crea y devuelve un Indice. Devuelve NULL en caso de error.
 * 'lexico' debe contener todas las rutas de los archivos físicos
 * correspondientes al léxico. De la misma manera, 'datos' a los datos. */
Indice_t* Indice_crear (vector_dinamico_t* lexico, vector_dinamico_t* datos) {
	if ( (!lexico) || (!datos) ) return NULL;
	
	Indice_t* indice = malloc (sizeof(Indice_t));
	if (!indice) return NULL;
	
	indice->rutas_lexico = lexico;
	indice->rutas_datos = datos;
	return indice;
}

/* Muestra el vector dinámico con las rutas al léxico almacenadas.
 * IMPORTANTE: NO debe ser borrado ni alterado! */
vector_dinamico_t* Indice_verRutasLexico (Indice_t* indice) {
	if (!indice) return NULL;
	return ( indice->rutas_lexico );
}

/* Muestra el vector dinámico con las rutas a los datos almacenadas.
 * IMPORTANTE: NO debe ser borrado ni alterado! */
vector_dinamico_t* Indice_verRutasDatos (Indice_t* indice) {
	if (!indice) return NULL;
	return ( indice->rutas_datos );
}

void Indice_imprimir (Indice_t* indice) {
	if (!indice) return;
	printf ("Rutas Lexicos: \n");
	for ( int i = 0 ; i < ( vector_cantidad (indice->rutas_lexico) ) ; i++ ) {
		printf ("%s\n", (char*) vector_obtener (indice->rutas_lexico,i) );
	}
	printf ("Rutas Datos: \n");
	for ( int j = 0 ; j < ( vector_cantidad (indice->rutas_datos) ) ; j++ ) {
		printf ("%s\n", (char*) vector_obtener (indice->rutas_datos,j) );
	}
}

/* Destruye el Indice. */
void Indice_destruir (Indice_t* indice) {
	if (!indice) return;
	vector_destruir (indice->rutas_lexico);
	vector_destruir (indice->rutas_datos);
	free (indice);
}
